{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "bd10c10b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# импортируем датасеты, модуль SVM, метрики и функцию train_test_split\n",
    "from sklearn import datasets, svm, metrics\n",
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4e481425",
   "metadata": {},
   "outputs": [],
   "source": [
    "# загружаем данные\n",
    "digits = datasets.load_digits()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6bf35174",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sklearn.utils.Bunch"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# тип объекта - Bunch\n",
    "type(digits)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "17554fab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'images', 'DESCR'])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "digits.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0b91d7fe",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1797"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# посмотрим сколько изображений\n",
    "len(digits.images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1bab8a01",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.],\n",
       "       [ 0.,  0., 13., 15., 10., 15.,  5.,  0.],\n",
       "       [ 0.,  3., 15.,  2.,  0., 11.,  8.,  0.],\n",
       "       [ 0.,  4., 12.,  0.,  0.,  8.,  8.,  0.],\n",
       "       [ 0.,  5.,  8.,  0.,  0.,  9.,  8.,  0.],\n",
       "       [ 0.,  4., 11.,  0.,  1., 12.,  7.,  0.],\n",
       "       [ 0.,  2., 14.,  5., 10., 12.,  0.,  0.],\n",
       "       [ 0.,  0.,  6., 13., 10.,  0.,  0.,  0.]])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# выведем матрицу первого изображения\n",
    "digits.images[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b2bcf3e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(8, 8)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "digits.images[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1c711a32",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "digits.images[0].size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8e8782bd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy0AAADoCAYAAADi3QucAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAe8klEQVR4nO3de3BU9f3/8VdIIIEQQgATUfLlogwXUyQEbOWWIIKlWBqp6Ch4aW0HJCiptUVGR0BbAnWq1FEjoRZGK4JpgYCF2iAJapEKEZCRFiuRJioUuQXKJUI4vz/4GV0DnN3wOTmf3X0+ZvaPnOy+951kXyQv9hbjOI4jAAAAALBUM78XAAAAAIALobQAAAAAsBqlBQAAAIDVKC0AAAAArEZpAQAAAGA1SgsAAAAAq1FaAAAAAFiN0gIAAADAapQWAAAAAFajtIQoJiYmqFN5ebnfqwbYsWOHZs6cqd27d1/0rMrKSo0dO1Zt27ZV69atNWLECL333nsXvyQiRrTn5IMPPtDkyZN17bXXKjEx0cqvFf6L9pz8/ve/V25urrp06aKWLVvqyiuv1L333qs9e/aYWRQRI9qz8sorr2jo0KFKS0tTfHy8LrvsMn3/+9/Xhg0bzCwaJuL8XiDcvPPOOwEfP/744yorK9O6desCjvfu3bsp13K1Y8cOzZo1Szk5OerSpUuj53z++ecaMmSIUlJS9Ic//EEJCQkqKChQTk6ONm3apB49ephbGmEr2nOyefNmrVixQpmZmRo+fLhWrVplbklEjGjPyYwZMzRs2DDNnj1bl19+uXbu3KnHH39cJSUl2rJli9LS0swtjbAW7Vk5cOCABg0apKlTp6pDhw7as2ePnnzySQ0dOlRvvPGGsrOzzS1tMUpLiL7zne8EfHzJJZeoWbNmDY431vHjx9WqVSsjs7zwxBNP6PPPP9eGDRvUuXNnSdLgwYN1xRVX6NFHH9XSpUt93hA2iPac3HHHHbrrrrskSX/6058oLTinaM/Jli1blJqaWv9xdna2+vXrpwEDBmjBggV65JFHfNwONon2rEyZMqXBsVGjRumSSy7RCy+8EDWlhYeHeeDZZ5/V0KFDlZqaqsTERH3rW9/Sb37zG506dSrgfDk5OcrIyNCbb76pgQMHqlWrVvrxj38sSfrkk0908803KykpSW3bttX48eO1adMmxcTEaNGiRQFzNm/erDFjxqhdu3ZKSEhQZmamXn311frPL1q0SOPGjZMkDRs2rP5u1G/OCcby5ct13XXX1RcWSWrTpo3Gjh2rVatW6fTp0yHPRHSK5Jw0a8Y/rTAjknPy9cLypaysLMXGxqq6ujrkeYhukZyVc0lKSlJCQoLi4qLn/gd+s3pg165duv322/XSSy/ptdde0z333KMnnnhCEydObHDePXv2aMKECbr99tu1evVqTZ48WceOHdOwYcNUVlamuXPn6tVXX1VaWppuvfXWBpcvKyvToEGDdPjwYT3//PMqKSlR3759deutt9YHY/To0Zo9e7aks6F+55139M4772j06NGSpPLycsXExGjmzJkX/LpOnDihXbt2qU+fPg0+16dPH504cUKVlZUhfrcQrSI1J4BJ0ZaT9evXq66uTldddVWjLo/oFQ1Zqaur06lTp7R7927de++9chxHeXl5oX+zwpWDi3LXXXc5iYmJ5/18XV2dc+rUKefFF190YmNjnYMHD9Z/Ljs725HkvPHGGwGXefbZZx1Jzpo1awKOT5w40ZHkLFy4sP5Yz549nczMTOfUqVMB573xxhudjh07OnV1dY7jOE5xcbEjySkrK2uwY3l5uRMbG+vMmjXrgl/rp59+6khyCgoKGnxu8eLFjiRnw4YNF5yB6BRNOfmmC80Evi6ac+I4jnPkyBGnV69eTnp6unP06NGQL4/oEa1Z6dGjhyPJkeR07NjRefvtt4O+bCTgnhYPbNmyRWPGjFH79u0VGxur5s2b684771RdXZ0+/PDDgPOmpKTouuuuCzi2fv16JSUl6bvf/W7A8dtuuy3g448++kj/+te/NH78eEnS6dOn60/f+973tGfPHu3cudN13+zsbJ0+fVqPPvpoUF9fTExMoz4HfF2k5wQwIVpycvLkSY0dO1b/+c9/VFxcrNatW4d0eSAasvLnP/9Z//jHP1RcXKzevXtr1KhR1r1impei54FwTaSqqkpDhgxRjx499Lvf/U5dunRRQkKC3n33XeXl5enEiRMB5+/YsWODGQcOHDjnq6Z889h///tfSdKDDz6oBx988Jz77N+/v7FfSgMpKSmKiYnRgQMHGnzu4MGDkqR27doZuz5ErkjOCWBKtOSktrZWN910k95++2299tpr+va3v+3J9SByRUtWvnzY5DXXXKPc3FxlZmZq6tSp2rZtmyfX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\n",
      "text/plain": [
       "<Figure size 1000x3000 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "fig, axes = plt.subplots(1, 4, figsize = (10,30))\n",
    "\n",
    "# в цикле for создадим кортеж из трех объектов: id изображения (всего их будет 4), самого изображения и\n",
    "# того, что на нем представлено (целевой переменной)\n",
    "for ax, image, label in zip(axes, digits.images, digits.target):\n",
    "    # на каждой итерации заполним соответствующее пространство картинкой\n",
    "    ax.imshow(image, cmap = 'gray')\n",
    "    # и укажем какой цифре соответствует изображение с помощью f форматирования\n",
    "    ax.set_title(f'Target: {label}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a57928b",
   "metadata": {},
   "source": [
    "### Подготовка данных"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a85cc850",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.,  0.,  5., 13.,  9.,  1.,  0.,  0.,  0.,  0., 13., 15., 10.,\n",
       "       15.,  5.,  0.,  0.,  3., 15.,  2.,  0., 11.,  8.,  0.,  0.,  4.,\n",
       "       12.,  0.,  0.,  8.,  8.,  0.,  0.,  5.,  8.,  0.,  0.,  9.,  8.,\n",
       "        0.,  0.,  4., 11.,  0.,  1., 12.,  7.,  0.,  0.,  2., 14.,  5.,\n",
       "       10., 12.,  0.,  0.,  0.,  0.,  6., 13., 10.,  0.,  0.,  0.])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# превратим двумерную матрицу в одномерный массив (flatten the images)\n",
    " \n",
    "# для этого создадим переменную с количеством изображений\n",
    "n_samples = len(digits.images)\n",
    " \n",
    "# и превратим каждое изображение в одномерный массив, где \n",
    "# строками будут изображения, а столбцами - их признаки (пиксели)\n",
    "digits_t = digits.images.reshape((n_samples, -1))\n",
    "\n",
    "# снова выведем первое изображение\n",
    "digits_t[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2b116fde",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(64,)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "digits_t[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "0219b64e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1797, 64)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "digits_t.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45a25e0b",
   "metadata": {},
   "source": [
    "### Обучение модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "aca32357",
   "metadata": {},
   "outputs": [],
   "source": [
    "# подготовим данные в формате X и y для наглядности\n",
    "X = digits_t\n",
    "y = digits.target\n",
    "\n",
    "# создадим объект классификатора (Support Vector Classifier) из модуля SVM\n",
    "svc_model = svm.SVC()\n",
    " \n",
    "# разделим выборки на обучающую и тестовую, размер тестовой выборки 30%\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
    "                                                    test_size = 0.3, \n",
    "                                                    random_state = 42)\n",
    " \n",
    "# обучим классификатор с помощью метода fit()\n",
    "svc_model.fit(X_train, y_train)\n",
    " \n",
    "# сделаем прогноз того, что представлено на картинке\n",
    "y_pred = svc_model.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "4c08411c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 79,  93, 126, 229, 325, 345, 402, 409, 428, 443, 455, 478, 485,\n",
       "       582, 608])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# с помощью атрибута support_ мы можем посмотреть на индексы точек (изображений),\n",
    "# которые использовались в качестве опорных векторов при обучении\n",
    "svc_model.support_[:15]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "d0a183a2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(613, 64)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# если применить индексы support_ к нашему датасету, то мы выберем только те изображения,\n",
    "# которые использовал классификатор (их было 613)\n",
    "X[svc_model.support_].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3fb7a038",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1257, 64)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# это примерно половина обучающей выборки\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f002e6e",
   "metadata": {},
   "source": [
    "### Оценка качества модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "3ecbc5a1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.99\n"
     ]
    }
   ],
   "source": [
    "print(\"Accuracy:\", np.round(metrics.accuracy_score(y_test, y_pred), 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "48393bd4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2068d8f9640>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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+PBhrxoBmIvDgJtOB/4m175hMAhY0DXXXKNp06apevXqSkhIOGWCyInBzgnl5eWKj4/XsmXLTvms8729SkREhN/vKS8vl3T8VHHXrl29XgsNDZUkud3u86rn13bt2qUbbrhBw4YN0wsvvKA6deroq6++0r333ut1Ol06fmuYk51YV15erueee04DBgw4ZZvw8PALrhMAAoHBIGBBNWvWVNOmTX3evmPHjsrKylK1atV0ySWXnHabVq1aadWqVbrrrrs861atWnXGz2zWrJkiIiL0+eef67777jvl9bCwMEnHO2knxMbG6uKLL9aOHTt0++23n/ZzW7durXfeeUdHjhzxDDjPVsfprF27VqWlpfrzn/+skJDjl07/4x//OGW70tJSrV27Vpdddpkkadu2bTp06JBatmwp6fj3bdu2bX59rwHAbBgMAlDPnj2VkpKi/v37a8KECWrRooV++eUXffrpp+rfv786d+6sRx55REOGDFHnzp11xRVX6N1339WmTZvUuHHj035meHi4nnzyST3xxBMKCwtTt27dtH//fm3atEn33nuv6tevr4iICC1cuFANGjRQeHi4YmJilJ6erocffljR0dHq3bu3iouLtXbtWuXl5WnkyJEaPHiwxowZo3vvvVdPP/20fv75Z/3f//2fX3mbNGmi0tJSvfbaa+rbt6++/vpr/fWvfz1lu+rVq+uhhx7Sq6++qurVq+vBBx/U5Zdf7hkcPvvss7rxxhuVmJioW265RSEhIfr++++1ceNGvfjii/4fCAABwxNIKjCbGIAcDoc+/fRTXXXVVbrnnnvUvHlzDRo0SD///LNn9u9tt92mZ599Vk8++aQ6deqkXbt26Q9/+MNZP/eZZ57Ro48+qmeffVatWrXSbbfdppycHEnHr8d79dVX9frrryshIUH9+vWTJN13331644039NZbb6ldu3a6+uqr9dZbb3luRRMZGal//etf2rx5s5KTkzVmzBhNmDDBr7wdOnTQpEmTNGHCBLVt21bvvvuuMjIyTtmuRo0aevLJJzV48GClpKQoIiJCc+fO9bx+/fXX65NPPtGSJUvUpUsXXX755Zo0aZIaNWrkVz0AYCSHuzIuwAEAAAgCLpdLMTEx2pOdp+jo6IDvu0FsbeXn5wd832dDZxAAAMDGGAwCAADYGBNIAACA/Tj+twR6nyZEZxAAAMDG6AwCAADb4QkkFegMAgAA2BidQQAAYDvcdLoCnUEAAAAbYzAIAABgY5wmBgAAtsOdZSrQGQQAALAxOoMAAMB+aA160BkEAACwMQaDAAAANsZgEAAA2I7DoP/Ox9SpU5WUlKTw8HB16tRJX375ZaV+LxgMAgAAmNR7772ntLQ0jRkzRuvXr9eVV16p3r17a/fu3ZW2D4fb7XZX2qcBAACYmMvlUkxMjLJz8xUdHR3wfcfWjVF+vu/77tq1qzp27Khp06Z51rVq1Ur9+/dXRkZGpdRFZxAAAMCESkpKtG7dOvXq1ctrfa9evbRy5cpK2w+3lgEAALbjcrkM2+fJ+3Y6nXI6nadsf+DAAZWVlSk2NtZrfWxsrLKysiqtLgaDAADANsLCwhQXF6dmSYmG7D8yMlKJid77Hjt2rNLT08/4HofDe+KJ2+0+Zd2FYDAIAABsIzw8XDt37lRJSYkh+z/dQO50XUFJuuiiixQaGnpKFzAnJ+eUbuGFYDAIAABsJTw8XOHh4UaXcU5hYWHq1KmTlixZot/+9ree9UuWLFG/fv0qbT8MBgEAAExq5MiRuvPOO9W5c2elpKRo+vTp2r17t4YNG1Zp+2AwCAAAYFK33XabcnNz9fzzz2vfvn1q27atPv30UzVq1KjS9sF9BgEAAGyM+wwCAADYGINBAAAAG2MwCAAAYGMMBgEAAGyMwSAAAICNMRgEAACwMQaDAAAANsZgEAAAwMYYDAIAANgYg0EAAAAbYzAIAABgYwwGAQAAbOz/AXgWtrUPfRUQAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 800x800 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# чтобы вывести матрицу ошибок, мы вначале создаем для нее пространство нужного нам размера\n",
    "fig, ax = plt.subplots(figsize = (8, 8))\n",
    "\n",
    "# а затем используем метод .from_estimator() класса ConfusionMatrixDisplay, которому передаем объект модели,\n",
    "# данные для проверки, цветовую схему и переменную пространства, куда мы и поместим матрицу\n",
    "metrics.ConfusionMatrixDisplay.from_estimator(svc_model, X_test, y_test, cmap = plt.cm.Blues, ax = ax)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "0a73d61d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxsAAADQCAYAAABvGXwjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAUZklEQVR4nO3de2zV9f0/8FexUG7VCio4FSqdFxbUZmMENwft8BIZrOgWs2VzoJtiNhdL5mU4DKBGJiMLZvOSZSIB0ahzKQnMS7IVvKFitjpJNnWO6nRjE1idNxTs+/sHv3a/Co7LPu8e2j0eSf/op5/P87xPPa9zzpPPp8eylFIKAACAgvUp9QIAAIDeSdkAAACyUDYAAIAslA0AACALZQMAAMhC2QAAALJQNgAAgCyUDQAAIAtlAwAAyKJHlY2lS5dGWVlZ51d5eXkcffTRccEFF8Rrr73WLWuorq6OGTNmdH6/Zs2aKCsrizVr1uxTzhNPPBHz5s2Ltra2XX5WV1cXdXV1/9U6c3jsscdi8uTJceihh8aAAQPiuOOOi+uuu67Uy+JDzEnpPP3003HWWWdFZWVlDB48OOrr6+Pxxx8v9bLYDXNSGi0tLfGFL3whRowYEQMGDIghQ4bEqaeeGnfeeWepl8ZumJPSmDFjRpff+4e/nnzyyVIvcZ+Ul3oB++OOO+6IE088Md5999145JFHYsGCBbF27dp47rnnYtCgQd26lk9+8pOxbt26+MQnPrFPxz3xxBMxf/78mDFjRlRVVXX52S233FLgCotx1113xfnnnx/nnXdeLFu2LAYPHhwvvfRS/PWvfy310vgI5qR7rV+/PiZMmBDjxo2L5cuXR0opFi5cGJMmTYrm5uY49dRTS71EdsOcdK+2trY45phj4qtf/WocddRR8fbbb8eKFSvi/PPPj9bW1pgzZ06pl8humJPudc0118Qll1yyy/apU6dGRUVFfPrTny7BqvZfjywbY8aMibFjx0ZERH19fXzwwQdx3XXXRVNTU3zta1/b7THvvPNODBw4sPC1HHzwwTF+/PhCM/d1gHJ77bXX4uKLL46ZM2d2Gcj6+voSroo9MSfd65prromqqqp48MEHO3+Hp59+eowaNSouv/xyZzgOUOake+3uX5CnTJkSGzdujJ/97GfKxgHKnHSvmpqaqKmp6bJt7dq1sXnz5pgzZ04cdNBBJVrZ/ulRl1F9lI4H3csvvxwRO08/DR48OJ577rk488wzo7KyMiZNmhQREe+//35cf/31ceKJJ0ZFRUUcfvjhccEFF8Trr7/eJXP79u1x5ZVXxvDhw2PgwIFx2mmnxdNPP73LbX/U6bynnnoqpk6dGkOHDo3+/ftHTU1NNDY2RkTEvHnz4oorroiIiGOPPbbztFhHxu6ejLdu3Rrf/va346ijjop+/frFqFGj4gc/+EG89957XfYrKyuLSy+9NJYvXx6jR4+OgQMHximnnBKrVq3a599rh5///Ofx9ttvx1VXXbXfGZSeOfm3HHPy+OOPR11dXZcX18rKypgwYUI88cQT8be//W2/s+k+5uTfcszJRznssMOivLxH/vvn/yRz8m/dNSe33357lJWVxYUXXlhobnfoFZP9pz/9KSIiDj/88M5t77//fnzxi1+MmTNnxve///3YsWNHtLe3R0NDQzz66KNx5ZVXxmc+85l4+eWXY+7cuVFXVxfPPPNMDBgwICIiLrrooli2bFlcfvnlccYZZ8SGDRvi3HPPjTfffHOP63nooYdi6tSpMXr06Pjxj38cI0aMiNbW1nj44YcjIuJb3/pWbN26NX7yk5/EL3/5yzjyyCMj4qOb9bZt26K+vj5eeumlmD9/fpx88snx6KOPxoIFC6KlpSVWr17dZf/Vq1fH+vXr49prr43BgwfHwoUL45xzzonnn38+Ro0a1blfWVlZTJw4cY/XPT7yyCMxZMiQ+OMf/xgNDQ2xYcOGGDJkSJx77rmxcOHCOPjgg/f4O6H0zEneOXn//fejoqJil+0d25577rnO+8CBy5zknZMO7e3t0d7eHv/85z/jvvvui4ceeih++tOf7tWxlJ456Z456fDGG2/EL37xi5g0aVIce+yx+3TsASH1IHfccUeKiPTkk0+m7du3pzfffDOtWrUqHX744amysjJt2rQppZTS9OnTU0SkJUuWdDn+7rvvThGR7r///i7b169fnyIi3XLLLSmllP7whz+kiEizZs3qst+KFStSRKTp06d3bmtubk4RkZqbmzu31dTUpJqamvTuu+9+5H350Y9+lCIibdy4cZefTZw4MU2cOLHz+9tuuy1FRLr33nu77HfjjTemiEgPP/xw57aISMOGDUv/+te/Ordt2rQp9enTJy1YsKDL8QcddFD6/Oc//5Fr7HDCCSek/v37p8rKynTDDTek5ubmtHDhwjRgwID02c9+NrW3t+8xg+5jTkozJ7W1ten4449PH3zwQee27du3p1GjRqWISHfdddceM+g+5qQ0c9Jh5syZKSJSRKR+/fp1/r44sJiT0s5Jh1tvvTVFRLr77rv3+dgDQY+8jGr8+PHRt2/fqKysjClTpsTw4cPjgQceiGHDhnXZ70tf+lKX71etWhVVVVUxderU2LFjR+dXbW1tDB8+vLNpNjc3R0Tsch3ieeedt8fTvC+88EK89NJL8c1vfjP69+//X97TnX7zm9/EoEGD4stf/nKX7R2fzvDrX/+6y/b6+vqorKzs/H7YsGFxxBFHdJ7u7LBjx45djt2d9vb22LZtW1x99dUxe/bsqKuriyuuuCIWLFgQjz/++F5l0P3MyU7dNSff/e5344UXXohLL700XnvttfjLX/4Sl1xySWdenz498um21zMnO3XXnHS4+uqrY/369bF69eq48MIL49JLL41Fixbt472hu5iTnbp7TjrcfvvtMXTo0DjnnHP2+dgDQY+8jGrZsmUxevToKC8vj2HDhu320oSBAwfucnnP3//+92hra4t+/frtNnfz5s0REbFly5aIiBg+fHiXn5eXl8fQoUP/49o6rkE8+uij9+7O7IUtW7bE8OHDo6ysrMv2I444IsrLyzvX22F3a6yoqIh33313v25/6NCh8eKLL8ZZZ53VZfvZZ58djY2N8dvf/jZOP/30/comH3OyU3fNyYUXXhivv/56XH/99XHrrbdGRMSpp54al19+edx4441x1FFH7VcueZmTnbprTjqMGDEiRowYERERkydPjoiI2bNnx/Tp07tcmsOBwZzs1N1zEhHx+9//Pp555pm47LLLdnupbk/QI8vG6NGjOz8V4aN8+AESsfMP0IYOHRoPPvjgbo/paKUdD5pNmzZ1eYOwY8eOXR5gH9bxJPnqq6/+x/32xdChQ+Opp56KlFKX+/WPf/wjduzYEYcddlhht7U7J5988m4/0zmlFBH+xfZAZU526q45iYi46qqrorGxMV588cWorKyMkSNHxsyZM2PQoEHxqU99Kvvts+/MyU7dOSe7M27cuLjtttviz3/+s7JxADInO5ViTm6//faI2Pl3Jz3V/9S7xClTpsSWLVvigw8+iLFjx+7ydcIJJ0REdH4iwYoVK7ocf++998aOHTv+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\n",
      "text/plain": [
       "<Figure size 1000x300 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# посмотрим на результат визуально \n",
    "fig, axes = plt.subplots(1, 4, figsize = (10, 3))\n",
    "for ax, image, prediction in zip(axes, X_test, y_pred):\n",
    "\n",
    "    # убрать рамку вокруг изображений\n",
    "    ax.set_axis_off()\n",
    "\n",
    "    # каждое изображение нужно восстановить до массива 2D \n",
    "    image = image.reshape(8, 8)\n",
    "\n",
    "    # в функции imshow изменим параметр cmap = plt.cm.gray_r \n",
    "    # это обратная серая цветовая схема\n",
    "    ax.imshow(image, cmap = plt.cm.gray_r)\n",
    "\n",
    "    # прогноз для каждого изображения\n",
    "    ax.set_title(f'Prediction: {prediction}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "20d45617",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
